/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package damas2;

import java.util.ArrayList;
/**
 *
 * @author Alex
 */
public class IA {
    private static IA singleton;
     public ArrayList<Lista_jogadas> jogadas_movendo= new ArrayList<Lista_jogadas>(20);
     public ArrayList<Lista_jogadas> jogadas_comendo= new ArrayList<Lista_jogadas>(20);
    public Protocolo protocolo= new Protocolo();
    public char [][] tabuleiro = new char[8][8];


     public static IA getInstance(){
    if (singleton == null) {
	singleton = new IA();
    }
    return singleton;}

public class Lista_jogadas {
	int LA;
	int CA;
	int LD;
	int CD;
        boolean teste;
}


    // tab passada como parametro com a transformacao do arquivo texto e fazer a chamada
    //dessa funcao...
public char[][] copia_Tabuleiro(char[][] tabuleiro){
  char[][] novo_tabuleiro = new char[8][8];
  for (int i=0;i<8;i++)
       for (int j=0;j<8;j++)
           novo_tabuleiro[i][j] = tabuleiro[i][j];
  return novo_tabuleiro;
  }

public void comer(Lista_jogadas aux, char[][] tabuleiro){
    if (aux.teste == true){
        tabuleiro[aux.LA][aux.CA] = 'x';
        tabuleiro[aux.LA -1][aux.CA +1] = 'x';
        tabuleiro[aux.LD][aux.CD] = 'p';
        /*JButton last = Engine.getInstance().setBotao(aux.LA,aux.CA);
        JButton mid = Engine.getInstance().setBotao(aux.LA -1,aux.CA +1);
        JButton next = Engine.getInstance().setBotao(aux.LD, aux.CD);
        last.setIcon(Interface.jbutton_vazio.getIcon());
        mid.setIcon(Interface.jbutton_vazio.getIcon());
        next.setIcon(Interface.jbutton_preto.getIcon());*/

    } else {
            tabuleiro[aux.LA][aux.CA] = 'x';
            tabuleiro[aux.LA -1][aux.CA -1] = 'x';
            tabuleiro[aux.LD][aux.CD] = 'p';
           /*JButton last = Engine.getInstance().setBotao(aux.LA,aux.CA);
        JButton mid = Engine.getInstance().setBotao(aux.LA -1,aux.CA -1);
        JButton next = Engine.getInstance().setBotao(aux.LD, aux.CD);
        last.setIcon(Interface.jbutton_vazio.getIcon());
        mid.setIcon(Interface.jbutton_vazio.getIcon());
        next.setIcon(Interface.jbutton_preto.getIcon());*/
            }

    }






public void mover(Lista_jogadas aux, char [][] tabuleiro){
    tabuleiro[aux.LA][aux.CA] = 'x';
    tabuleiro[aux.LD][aux.CD] = 'p';
    /*JButton last = Engine.getInstance().setBotao(aux.LA,aux.CA);
    JButton next = Engine.getInstance().setBotao(aux.LD,aux.CD);
    last.setIcon(Interface.jbutton_vazio.getIcon());
    next.setIcon(Interface.jbutton_preto.getIcon());*/

}

     public void preenche_mover (char [][] tabuleiro){
 Lista_jogadas aux= new Lista_jogadas();
 jogadas_movendo = new ArrayList<Lista_jogadas>(20);
 int i,j;
   for (i=0;i<tabuleiro.length;i++){
        if ( i%2 != 0 ) { //1
            for( j = 1;j<tabuleiro[i].length;j+=2){ //2
               if (tabuleiro[i][j] == 'p'){ //3
                    if (j!=7){ //4
                        if (tabuleiro[i-1][j-1] == 'x'){ //5
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-1;
                            aux.CA=j;
                            aux.CD=j-1;
                            aux.teste=false;
                        jogadas_movendo.add(aux);
                             } //fim 5
                            if (tabuleiro[i-1][j+1] == 'x'){ //9
                                    aux = new Lista_jogadas();
                                    aux.LA=i;
                                    aux.LD=i-1;
                                    aux.CA=j;
                                    aux.CD=j+1;
                                    aux.teste=false;
                                    jogadas_movendo.add(aux);
                              }//9

                    } //4
                       else{ //11
                            if (j==7){ //12
                                if (tabuleiro[i-1][j-1] == 'x'){ //13
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-1;
                            aux.CA=j;
                            aux.CD=j-1;
                            aux.teste=false;
                        jogadas_movendo.add(aux);
                        }//13
                            }//12
                        }//11
                        }

               }//fim 2
            }// fim 1
        else{
            for(j = 0;j<tabuleiro[i].length;j+=2){
                 if (tabuleiro[i][j] == 'p'){
                    if (j!=0){
                        if (tabuleiro[i-1][j-1] == 'x'){
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-1;
                            aux.CA=j;
                            aux.CD=j-1;
                            aux.teste=false;
                        jogadas_movendo.add(aux);
                        }
                        if (tabuleiro[i-1][j+1] == 'x'){
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-1;
                            aux.CA=j;
                            aux.CD=j+1;
                            aux.teste=false;
                        jogadas_movendo.add(aux);
                        }
                        }
                       else {
                           if (j==0){
                             if (tabuleiro[i-1][j+1] == 'x'){
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-1;
                            aux.CA=j;
                            aux.CD=j+1;
                            aux.teste=false;
                        jogadas_movendo.add(aux);
                           }
                          }
                        }
                    }
                    }

            }
            }
        }


     public void preenche_comer (char [][] tabuleiro){
 Lista_jogadas aux= new Lista_jogadas();
 jogadas_comendo = new ArrayList<Lista_jogadas>(20);
 int i,j;
   for (i=0;i<tabuleiro.length-2;i++){
        if ( i%2 != 0 ) { //1
            for( j = 1;j<tabuleiro[i].length;j+=2){ //2
               if (tabuleiro[i][j] == 'p'){ //3
                    if ((j+2 < 8) && (j-2 >= 0)){ //4
                        if (Character.toUpperCase(tabuleiro[i-1][j-1]) == 'B' && tabuleiro[i-2][j-2] == 'x'){ //2
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-2;
                            aux.CA=j;
                            aux.CD=j-2;
                            aux.teste=false;
                        jogadas_comendo.add(aux);
                             } //fim 5
                            if (Character.toUpperCase(tabuleiro[i-1][j+1]) == 'B' && tabuleiro[i-2][j+2] == 'x'){ //9
                                    aux = new Lista_jogadas();
                                    aux.LA=i;
                                    aux.LD=i-2;
                                    aux.CA=j;
                                    aux.CD=j+2;
                                    aux.teste=true;
                                    jogadas_comendo.add(aux);
                              }//9

                    } //4
                       else{ //11
                            if (j==7 || j==6){ //12
                                if (Character.toUpperCase(tabuleiro[i-1][j-1]) == 'B' && tabuleiro[i-2][j-2] == 'x'){ //13
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-2;
                            aux.CA=j;
                            aux.CD=j-2;
                            aux.teste=false;
                        jogadas_comendo.add(aux);
                        }//13
                            }//12
                        }//11
                        }

               }//fim 2
            }// fim 1
        else{
            for(j = 0;j<tabuleiro[i].length;j+=2){
                 if (tabuleiro[i][j] == 'p'){
                    if (j!=0 && j!=1){
                        if (Character.toUpperCase(tabuleiro[i-1][j-1]) == 'B' && tabuleiro[i-2][j-2] == 'x'){
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-2;
                            aux.CA=j;
                            aux.CD=j-2;
                            aux.teste=false;
                        jogadas_comendo.add(aux);
                        }
                        if (Character.toUpperCase(tabuleiro[i-1][j+1]) == 'B' && tabuleiro[i-2][j+2] == 'x'){
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-2;
                            aux.CA=j;
                            aux.CD=j+2;
                            aux.teste=true;
                        jogadas_comendo.add(aux);
                        }
                        }
                       else {
                           if (j==0 || j==1){
                             if (Character.toUpperCase(tabuleiro[i-1][j+1]) == 'B' && tabuleiro[i-2][j+2] == 'x'){
                            aux = new Lista_jogadas();
                            aux.LA=i;
                            aux.LD=i-2;
                            aux.CA=j;
                            aux.CD=j+2;
                            aux.teste=true;
                        jogadas_comendo.add(aux);
                           }
                          }
                        }
                    }
                    }

            }
            }
        }

     public void jogada_IA(){
    protocolo.Receber_tabuleiro(tabuleiro);
    preenche_comer(tabuleiro);
    if (jogadas_comendo.size() != 0)
    {
      comer(jogadas_comendo.get(0),tabuleiro); // fazer
    }
    else{
        preenche_mover(tabuleiro);
        if (jogadas_movendo.size() != 0)
        {
            mover(jogadas_movendo.get(0),tabuleiro);
        }else System.out.println("IA diz: Não consigo jogar!!");
    }
    vira_DAMA_IA(tabuleiro);
    protocolo.Enviar_tabuleiro(tabuleiro);
}

    public void vira_DAMA_IA(char[][] tabuleiro){
    int j;

    for (j=0;j<8;j++){
        if (tabuleiro[0][j] == 'p'){

            tabuleiro[0][j] = 'P';

        }
    }
    }





    }


// FECHA CLASSE IA


/*
 public char [][] IA_protocolo (tabuleiro tabela){
  int i,j;
  char [][] aux =new char [8][8];
  for (i=0;i<8;i++)
       for (j=0;j<8;j++){
           if (tabela.matriz[i][j] == 1)
               aux[i][j] = 'p';
           else{
                if (tabela.matriz[i][j] == -1)
                   aux[i][j]='b';
           else{
               if (tabela.matriz[i][j] == 2 )
                   aux [i][j] = 'P';
           else{
                if (tabela.matriz[i][j] == -2)
                   aux[i][j]='B';
               else{
                   aux [i][j]='x';
               }
           }

       }
           }
       }
  return aux;
  }
*/
